package com.xb.loan.cashier.biz.task;


import com.xb.loan.cashier.service.constant.ICashierEnumConst;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 任务管理工厂类
 * 
 * 根据不同的业务场景来分配不同的任务管理器
 * 		CHARGE_QUERY 充值查询任务 
 *		ENCASH_QUERY 提现查询任务 
 *		PUSH_CHARGE_RESULT 推送充值订单结果任务 
 *		PUSH_ENCASH_RESULT 推送提现订单结果任务 
 * 
 *
 */
public class TaskManagerFactory {
	//初始化可重入锁
	private static final Lock lock = new ReentrantLock();
	
	//缓存任务管理,不使用ConcurrentHashMap，避免影响效率
	private static final Map<String , TaskManager> taskManagerMap = new HashMap<String , TaskManager>();
	
	/**
	 * 获取不同任务的管理类
	 *
	 * @author zheng.p
	 * @date 2016年5月29日 下午6:05:31
	 */
	public static TaskManager getTaskManager(ICashierEnumConst.TaskManagerCode taskCode){
		
		TaskManager taskManager = taskManagerMap.get(taskCode.getCode());
		
		if(null == taskManager){
			//如果没有初始化过任务管理器，则创建
			lock.lock();
			
			try{
				
				taskManager = taskManagerMap.get(taskCode.getCode());
				
				if(null == taskManager){
					
					taskManager = new TaskManager(taskCode.getCode());
					taskManagerMap.put(taskCode.getCode() , taskManager);
				}
				
			}finally{
				
				//释放锁
				lock.unlock();
			}
		}
		
		return taskManager;
	}
}
